home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / bbsutil / hsrc_117.zip / LISTPICK.C < prev    next >
Text File  |  1990-10-16  |  6KB  |  207 lines

  1. /* List-pick functions */
  2.  
  3. #include "msgg.h"
  4. #include "twindow.h"
  5. #include "keys.h"
  6. #include "headedit.h"
  7.  
  8. extern WINDOW *ewnd;
  9.  
  10.  
  11. word pascal list_mess (void) {
  12.  
  13.     char s[60];
  14.     word top;
  15.     word low;
  16.     word counter;
  17.     word tempmess;
  18.     int  selection;
  19.     WINDOW *wnd;
  20.  
  21.         set_help("messlist  ",18,0);
  22.         clear_message();
  23.         wnd=establish_window(0,0,maxy,maxx);
  24.         set_border(wnd,1);
  25.         sprintf(s," Listing Area#%u for selection -- F10 to jump ",areano);
  26.         set_title(wnd,s);
  27.         display_window(wnd);
  28.         wcursor(wnd,0,0);
  29.         counter=0;
  30.         tempmess=messno;
  31.         low=messno;
  32. OverAgain:
  33.         if(nomess>maxy-3) {
  34.             if ((nomess-low)<maxy-2) low=nomess-(maxy-3);
  35.         }
  36.         else low=1;
  37.         while(1) {
  38.             messno=low++;
  39.             get_mess(1);
  40.             msg2.from[17]=0;
  41.             msg2.to[17]=0;
  42.             msg2.subj[34]=0;
  43.             wprintfraw(wnd,"%05u %-17s %-17s  %s",messno,msg2.from,msg2.to,msg2.subj);
  44.             counter++;
  45.             if (counter>=maxy-2 || low>nomess) break;
  46.             wputchar(wnd,'\n');
  47.         }
  48. Again:
  49.                 selection=get_selection(wnd,1,NULL);
  50.                 if(selection>0 && selection<maxy-1) {
  51.                     if(nomess>maxy-3)messno=(messno-(maxy-2))+selection;
  52.                     else messno=(messno-nomess)+selection;
  53.                     if(messno>nomess) messno=nomess;
  54.                     clear_message();
  55.                     delete_window(wnd);
  56.                     return messno;
  57.                 }
  58.                 counter=0;
  59.                 switch (selection) {
  60.                     case F10:   low=select_mess();
  61.                                 break;
  62.                     case HOME:    low=1;
  63.                                 break;
  64.                     case END:   if(nomess>(maxy-3)) low=nomess-(maxy-3);
  65.                                 else low=1;
  66.                                 break;
  67.                     case PGUP:
  68.                     case BS:    if(low<(maxy) && nomess>(maxy-3)) {
  69.                                     low=nomess-(maxy-3);
  70.                                     break;
  71.                                 }
  72.                                 if (low<(maxy-1)) break;
  73.                                 else if (low<((maxy * 2)-5)) low=1;
  74.                                 else low-=((maxy * 2)-6);
  75.                                 break;
  76.                     case PGDN:
  77.                     case FWD:   if (low>nomess)    low=1;
  78.                                 else if ((nomess-low)<(maxy-2)) {
  79.                                     if (nomess>(maxy-3)) low=nomess-(maxy-3);
  80.                                     else low=1;
  81.                                 }
  82.                                 break;
  83.                     case 0:     goto BreakOut;
  84.                     default:    bell();
  85.                                 break;
  86.                 }
  87.                 clear_message();
  88.                 clear_window(wnd);
  89.                 wcursor(wnd,0,0);
  90.                 goto OverAgain;
  91. BreakOut:
  92.         clear_message();
  93.         delete_window(wnd);
  94.         messno=tempmess;
  95.         return messno;
  96. }
  97.  
  98.  
  99.  
  100. word pascal list_areas (void) {
  101.  
  102.     char s[60];
  103.     word lineareas[51];
  104.     word temparea;
  105.     char dirstring[133];
  106.     word counter;
  107.     register word x;
  108.     word temp;
  109.     int  temporary;
  110.     int  selection;
  111.     struct ffblk f;
  112.     WINDOW *wnd;
  113.  
  114.         set_help("arealist  ",18,0);
  115.         clear_message();
  116.         wnd=establish_window(0,0,maxy,maxx);
  117.         set_border(wnd,1);
  118.         sprintf(s," Listing areas for selection -- F10 to jump ");
  119.         set_title(wnd,s);
  120.         display_window(wnd);
  121.         wcursor(wnd,0,0);
  122.         temparea=areano;
  123.         x=0;
  124. OverAgain:
  125.         counter=0;
  126.         for(temporary=0;temporary<(maxy+1);temporary++)lineareas[temporary]=0;
  127.         while(1) {
  128.                 areano=marea[x].number;
  129.                 if(areano>4096) break;
  130.                 temporary=find_area();
  131.                 if(!temporary) break;
  132.                 sprintf(dirstring,"%sXDATA.%03x",path,areano);
  133.                 if (findfirst(dirstring,&f,0)) temp=0;
  134.                 else temp=(word)(f.ff_fsize/(long)sizeof(struct _xmsg));
  135.                 lineareas[counter]=areano;
  136.                 wprintf(wnd,"Area#%-4u %-16.16s %-5u message(s) ",areano,currarea->name,temp);
  137.                 if (temp>lastread[areano-1]+1) wprintf(wnd," --New @ %-5u",lastread[areano-1]+1);
  138.                 else if (temp) wprintf(wnd," (None New)   ");
  139.                 else wprintf(wnd,"              ");
  140.                 wprintf(wnd,"%s",area_attr());
  141.                 x++;
  142.                 counter++;
  143.                 if(counter>=(maxy-2) || x>=maxareas) break;
  144.                 wprintf(wnd,"\n");
  145.         }
  146. Again:
  147.                 selection=get_selection(wnd,1,NULL);
  148.                 if(selection>0 && selection<(maxy-1)) {
  149.                     if(lineareas[selection-1])areano=lineareas[selection-1];
  150.                     else {
  151.                         bell();
  152.                         goto Again;
  153.                     }
  154.                     nomess=check_area(areano);
  155.                     find_area();
  156.                     clear_message();
  157.                     delete_window(wnd);
  158.                     return areano;
  159.                 }
  160.                 switch (selection) {
  161.                     case F10:    areano=select_area();
  162.                                 if(areano) {
  163.                                     nomess=check_area(areano);
  164.                                     find_area();
  165.                                     clear_message();
  166.                                     delete_window(wnd);
  167.                                     return areano;
  168.                                 }
  169.                                 break;
  170.                     case HOME:  x=0;
  171.                                 break;
  172.                     case END:   if(maxareas>(maxy-3)) x=maxareas-(maxy-2);
  173.                                 else x=1;
  174.                                 break;
  175.                     case PGUP:
  176.                     case BS:    if(x<(maxy-1) && maxareas>(maxy-3)) {
  177.                                     x=maxareas-(maxy-2);
  178.                                     break;
  179.                                 }
  180.                                 if (x<(maxy-3)) break;
  181.                                 else if (x<((maxy * 2)-6)) x=0;
  182.                                 else x-=((maxy * 2)-5);
  183.                                 break;
  184.                     case PGDN:
  185.                     case FWD:   if (x>=maxareas) x=0;
  186.                                 else if ((maxareas-x)<(maxy-2)) {
  187.                                     if (maxareas>(maxy-3)) x=maxareas-(maxy-2);
  188.                                     else x=0;
  189.                                 }
  190.                                 break;
  191.                     case 0:     goto BreakOut;
  192.                     default:    bell();
  193.                                 break;
  194.                 }
  195.                 counter=0;
  196.                 clear_message();
  197.                 clear_window(wnd);
  198.                 wcursor(wnd,0,0);
  199.                 goto OverAgain;
  200. BreakOut:
  201.         clear_message();
  202.         delete_window(wnd);
  203.         areano=temparea;
  204.         return areano;
  205. }
  206.  
  207.